package com.wgy.day37Stream流.常用方法;

import java.util.stream.Stream;

/*
Stream流中的常用方法filter:用于对Stream流中的数据进行过滤
Stream<T> filter(Predicate<? super T> predicate):对Stream流中的数据进行过滤,并返回一个新的流
filter方法的参数:是一个Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
               Predicate中的抽象方法:
                 boolean test(T t)
*/
public class Demo04Stream_filter {
    public static void main(String[] args) {
        //1.获取一个Stream流
        Stream<String> stream = Stream.of("张三丰", "赵敏", "张无忌", "周芷若", "张翠山");
        //2.使用Stream流中的方法filter,对stream中的数据进行过滤,只要姓张的
        Stream<String> stream1 = stream.filter((String name) -> {
            return name.startsWith("张");
        });
        //3.使用Stream流中的方法forEach,对stream1中的数据进行遍历
        stream1.forEach(name-> System.out.println(name));


      /*  Stream流属于管道流,只能被消费(使用)一次,
      第一个Stream流调用完毕方法,数据就会流转到下一个Stream流上
      而这时第一个Stream流已经使用完毕,就会关闭了
      所以第一个Stream就不能再调用方法了,此时如果再来使用第一个Stream流,运行就会抛出异常
      IllegalStateException: stream has already been operated upon or closed

*/
      //  stream.forEach(name-> System.out.println(name));
    }
}
